package com.demo.java.OD301_350.OD321;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【跳格子2(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146118153
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 获取输入的字符串并拆分成数组
        String[] strings = scanner.nextLine().split(" ");
        int[] nums = new int[strings.length - 1]; // 创建一个数组来存储每个格子的分数

        // 将输入字符串数组转换为整数数组
        for (int i = 0; i < nums.length; i++) {
            nums[i] = Integer.parseInt(strings[i]);
        }

        // 计算最大得分
        int res = maxSumNonAdjacent(nums);

        // 输出最大得分
        System.out.println(res);
    }

    // 定义计算最大非相邻和的函数
    public static int maxSumNonAdjacent(int[] nums) {
        int n = nums.length;

        // 处理特殊情况：如果没有格子，返回0
        if (n == 0) {
            return 0;
        }

        // 如果只有一个格子，返回该格子的分数
        else if (n == 1) {
            return nums[0];
        }

        // 如果有两个格子，返回两个格子中最大的那个
        else if (n == 2) {
            return Math.max(nums[0], nums[1]);
        }

        // 初始化前一个格子的最大得分为第一个格子的得分
        int prevMax = nums[0];

        // 初始化当前格子的最大得分为第一个和第二个格子中的最大值
        int currMax = Math.max(nums[0], nums[1]);

        // 从第三个格子开始遍历，更新前一个格子的最大得分和当前格子的最大得分
        for (int i = 2; i < n; i++) {
            // 临时保存当前最大得分
            int temp = currMax;

            // 计算当前最大得分：可以选择当前格子，或者跳过当前格子选择前一个格子的最大得分
            currMax = Math.max(currMax, prevMax + nums[i]);

            // 更新前一个格子的最大得分
            prevMax = temp;
        }

        // 返回最终的最大得分
        return currMax;
    }
}